package br.com.funaction.eventtcontrollerv2.controller;

import java.io.IOException;
import java.io.Serializable;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

import br.com.funaction.eventtcontrollerv2.model.PDVDAO;
import br.com.funaction.eventtcontrollerv2.entities.Franquia;
import br.com.funaction.eventtcontrollerv2.entities.PDV;

import java.sql.SQLException;

@RequestScoped
@ManagedBean
public class CadastroPDVMB implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private PDV pdv = new PDV();
	private PDVDAO pdvDAO = new PDVDAO();
	Franquia franquia = new Franquia();
	FacesContext contexto = FacesContext.getCurrentInstance();
	//Para calculo de valor acumulativo de clientes
	private int primeiroCaso;
	private int segundoCaso;
	private int terceiroCaso;
	private int quartoCaso;
	//Para calculo de valor acumulativo de clientes

	@PostConstruct
	public void init(){
		
		try{
			
			autenticacao();
			
		} catch(Exception e){
			
			this.franquia.setId(1);
		}
		
		try{
			
			populaListaPDV();
			
		} catch(Exception e){
			
		}
	}
	
	private void autenticacao() throws IOException{
		
		franquia = (Franquia) contexto.getExternalContext().getSessionMap().get("franquia");
		if(franquia == null){
			
			ExternalContext contextoExterno = contexto.getExternalContext();
			contextoExterno.redirect("/eventt-controller-v2/jsf/login/login.jsf");
			return;
		}
		pdv.setIdFranquia(franquia.getId());
	}
	
	private void populaListaPDV() throws SQLException{
		
		pdv.setListaPDV(pdvDAO.listaTodosPDV(pdv));
	}
	
	public void cadastraPDV() throws SQLException, IOException{
		
		if(pdv.getPfPj()==1){
			cadastraPF();
		} else{
			cadastraPJ();
		}
	}

	private void cadastraPF() throws SQLException, IOException{
		
		try{ 
			pdvDAO.persistPF(pdv);
			contexto.addMessage(null, new FacesMessage("Sucesso!", "PDV cadastrado."));
		} catch (SQLException e){ 
			contexto.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, 
					"Falha!", "Erro ao cadastrar PDV. " + 
							"Contate o administrador do sistema. Erro " + 
							e.getErrorCode()));
		}
		
		ExternalContext contextoExterno = contexto.getExternalContext();
		contextoExterno.redirect("/eventt-controller-v2/index.jsf");
		return;
	}
	
	private void cadastraPJ() throws SQLException, IOException{
		
		try{ 
			pdvDAO.persistPJ(pdv);
			contexto.addMessage(null, new FacesMessage("Sucesso!", "PDV cadastrado."));
		} catch (SQLException e){ 
			contexto.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, 
					"Falha!", "Erro ao cadastrar PDV. " + 
							"Contate o administrador do sistema. Erro " + 
							e.getErrorCode()));
		}
		
		ExternalContext contextoExterno = contexto.getExternalContext();
		contextoExterno.redirect("/eventt-controller-v2/index.jsf");
		return;
	}
	
	public void calculaProjecao(){
		
		primeiroCaso = (int)pdv.getCondRemuneracaoValorAcumulativo();
		segundoCaso = primeiroCaso * 2;
		terceiroCaso = primeiroCaso * 3;
		quartoCaso = primeiroCaso * 4;
	}

	public PDV getPdv() {
		return pdv;
	}
	
	public void setPdv(PDV pdv) {
		this.pdv = pdv;
	}
	
	public int getPrimeiroCaso() {
		return primeiroCaso;
	}

	public void setPrimeiroCaso(int primeiroCaso) {
		this.primeiroCaso = primeiroCaso;
	}

	public int getSegundoCaso() {
		return segundoCaso;
	}

	public void setSegundoCaso(int segundoCaso) {
		this.segundoCaso = segundoCaso;
	}

	public int getTerceiroCaso() {
		return terceiroCaso;
	}

	public void setTerceiroCaso(int terceiroCaso) {
		this.terceiroCaso = terceiroCaso;
	}

	public int getQuartoCaso() {
		return quartoCaso;
	}

	public void setQuartoCaso(int quartoCaso) {
		this.quartoCaso = quartoCaso;
	}
}